/**
 * \file Erreur.h
 * \brief Définie les fonctions permettant de gérer les erreurs
 *  c'est l'équivalent d'une classe statique, aucune instance précise
 *  n'a donc pas a être créée et donc passée en argument
 */
#ifndef ERREUR_H_
#define ERREUR_H_

#include <stdlib.h>
#include <assert.h>

/**
 * \fn void* emalloc(size_t size)
 * \brief Alloue de la mémoire de "size" octets
 *  en gérant les erreurs (écriture dans le log d'erreur en cas de problème
 *  et en écrivant 0 dans toute la mémoire allouée
 * \param size Nombre d'octets à allouer
 * \return l'adresse mémoire allouée
 * 	       NULL en cas d'erreur
 */
void* emalloc(size_t size);
void erreurSetLast(int idErreur,char* desc);
void erreurPrintLog();

#ifndef NDEBUG
#define eassert(exp)\
	if(!(exp)){ \
		erreurPrintLog(stderr); \
		assert((exp)); \
	} 
#else
#define eassert(exp) (void)0 
#endif

#endif /* ERREUR_H_ */
